<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app"></div>
</body>
<script src="https://unpkg.com/vue@next"></script>
<script>
    const app=Vue.createApp({
        data() {
            return {
                componentName:'common-demo'
            }
        },
        template:`
        <div @click="handleChangeClick">切换</div>
 
        <common on-demo v-show="componentName==='common-demo'"/>
        <keep-alive>
            <component :is="componentName"/>
        </keep-alive>`,
        methods: {
            handleChangeClick(){
                if(this.componentName==='input-demo'){
                    this.componentName='common-demo'
                }else{
                    this.componentName='input-demo'
                }
            }
        },
    })
    app.component('input-demo',{
        template:`<input />`
    })
    app.component('common-demo',{
        template:`<p>hello</p>`
    })
    app.mount("#app")
</script>
</html>